package com.matpala.practico1.a;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class Ventana extends JFrame {

	private javax.swing.JButton cmdSalir;
	private javax.swing.JButton cmdSiguiente;
	private javax.swing.JButton cmdSortear;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JLabel lblA;
	private javax.swing.JLabel lblC;
	private javax.swing.JLabel lblM;
	private javax.swing.JLabel lblX;
	private javax.swing.JTable tableSorteados;
	private javax.swing.JTextField txtA;
	private javax.swing.JTextField txtC;
	private javax.swing.JTextField txtM;
	private javax.swing.JTextField txtSiguiente;
	private javax.swing.JTextField txtX;
	
	private GeneradorMixto genMixto;
	private DefaultTableModel datosTabla;


	private static final long serialVersionUID = 1L;
	public Ventana() {
		initComponents();
	}

	private void initComponents() {
		
		//genMixto = new GeneradorMixto(5, 7, 7, 8);
		
		cmdSalir = new javax.swing.JButton();
		txtSiguiente = new javax.swing.JTextField();
		jScrollPane1 = new javax.swing.JScrollPane();
		tableSorteados = new javax.swing.JTable();

		lblA = new javax.swing.JLabel();
		txtA = new javax.swing.JTextField();
		lblX = new javax.swing.JLabel();
		txtX = new javax.swing.JTextField();
		lblC = new javax.swing.JLabel();
		txtC = new javax.swing.JTextField();
		lblM = new javax.swing.JLabel();
		txtM = new javax.swing.JTextField();

		cmdSiguiente = new javax.swing.JButton();
		cmdSortear = new javax.swing.JButton();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		setTitle("Otra Ventana");
		setMinimumSize(new Dimension(450, 325));
		setResizable(false);
		getContentPane().setLayout(null);

		lblX.setText("Componente X:");
		getContentPane().add(lblX);
		lblX.setBounds(10, 20, 95, 15);
		getContentPane().add(txtX);
		txtX.setBounds(120, 20, 80, 19);
		
		//verifico que sea números lo que se ingresa
		//lo cambie por el keypresed es mejor para este caso
		//solo dejo ingresar numero
		//txtX.setInputVerifier(new IntegerVerifiquer());
		
		//getContentPane().add(lblA); con esto agrego el componente al contenedor
		//
		lblA.setText("Componente A: ");
		getContentPane().add(lblA);
		//seteo posición y tamaño del control
		lblA.setBounds(10, 50, 100, 15);
		getContentPane().add(txtA);
		txtA.setBounds(120, 50, 80, 19);		

		lblC.setText("Componente C:");
		getContentPane().add(lblC);
		lblC.setBounds(10, 80, 96, 15);
		getContentPane().add(txtC);
		txtC.setBounds(120, 80, 80, 19);

		lblM.setText("Componente M:");
		getContentPane().add(lblM);
		lblM.setBounds(10, 110, 98, 15);
		getContentPane().add(txtM);
		txtM.setBounds(120, 110, 80, 19);
		
		cmdSortear.setText("Sortear");
		getContentPane().add(cmdSortear);
		cmdSortear.setBounds(10, 170, 78, 20);
		
		cmdSiguiente.setText("Siguiente");
		getContentPane().add(cmdSiguiente);
		cmdSiguiente.setBounds(10, 260, 92, 20);
		getContentPane().add(txtSiguiente);
		txtSiguiente.setEditable(false);
		txtSiguiente.setBounds(120, 260, 81, 20);
		
		cmdSalir.setText("Salir");
		getContentPane().add(cmdSalir);
		cmdSalir.setBounds(310, 260, 92, 20);
		
		//agrego los encabezados a la tabla
		datosTabla = new DefaultTableModel();
		
		datosTabla.addColumn("N");
		datosTabla.addColumn("Xn+1");
		tableSorteados.setModel(datosTabla);
		//evito que se edite
		tableSorteados.setEnabled(false);
		jScrollPane1.setViewportView(tableSorteados);

		getContentPane().add(jScrollPane1);
		jScrollPane1.setBounds(220, 20, 189, 230);
		

		//eventos botones

		cmdSalir.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent evt) {
				cmdSalirMouseClicked(evt);
			}
		});
		cmdSortear.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e){
				cmdSortearClick(e);
			}
		});
		cmdSiguiente.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent evt) {
				cmdSiguienteMouseClicked(evt);
			}
		});
		
		
		txtX.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				camposTxtSoloNumeros(e);
			}
		});
		txtA.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e){
				camposTxtSoloNumeros(e);
			}
		});
		txtC.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e){
				camposTxtSoloNumeros(e);
			}
		});
		txtM.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e){
				camposTxtSoloNumeros(e);
			}
		});
	
		pack();
	}
	
	protected void camposTxtSoloNumeros(KeyEvent e) {
		char c = e.getKeyChar();
		if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
			getToolkit().beep();
			e.consume();
		}
//    	if (k == 10) {
//  	//transfiere el foco si presionas enter
//   	txtA.transferFocus();

	}
	private void cmdSiguienteMouseClicked(MouseEvent evt) {
		//agrego valores a la grilla con el boton siguiente
		datosTabla.addRow(new Integer[]{datosTabla.getRowCount() + 1,genMixto.generar()});
		//tomo el ultimo dato de la grilla y lo pongo en el txtsiguiente
		txtSiguiente.setText(String.valueOf(datosTabla.getValueAt(datosTabla.getRowCount()-1, 1)));
		
		//va moviendo el scroll para que se vea el ultimo dato que ingresamos a la tabla
		Rectangle rectangulo = tableSorteados.getCellRect(datosTabla.getRowCount() -1,1,true); 
		jScrollPane1.getViewport().scrollRectToVisible (rectangulo);
		
	}
	private void cmdSalirMouseClicked(MouseEvent evt) {
		//cuando presiono cerrar cierro la aplicacion
		System.exit(DISPOSE_ON_CLOSE);
	}
	
	public void cmdSortearClick(MouseEvent e) {
		
		if(txtX.getText().isEmpty() || txtA.getText().isEmpty() || txtC.getText().isEmpty() ||
				txtM.getText().isEmpty()){
			JOptionPane.showMessageDialog(null, "Los componentes no pueden estar vacios", "Error",JOptionPane.ERROR_MESSAGE);
			return;
		}
		
		if(txtA.getText().charAt(0)=='0' || txtX.getText().charAt(0)=='0' || 
				txtC.getText().charAt(0)=='0' || txtM.getText().charAt(0)=='0'){
			JOptionPane.showMessageDialog(null, "Los componentes comenzar por cero", "Error",JOptionPane.ERROR_MESSAGE);
			return;
		}
		
		if(Integer.parseInt(txtM.getText()) <= Integer.parseInt(txtA.getText()) || 
				Integer.parseInt(txtM.getText()) <=  Integer.parseInt(txtX.getText()) ||
				Integer.parseInt(txtM.getText()) <=  Integer.parseInt(txtC.getText())){
			JOptionPane.showMessageDialog(null, "El componente M debe ser mayor que los demas", "Error",JOptionPane.ERROR_MESSAGE);
			return;
		}
		
		if(datosTabla.getRowCount() == 0){
			Rectangle rectangulo = tableSorteados.getCellRect(1,1,true); 
			jScrollPane1.getViewport().scrollRectToVisible (rectangulo);
			genMixto = new GeneradorMixto(Integer.parseInt(txtX.getText()), Integer.parseInt(txtA.getText()),
					Integer.parseInt(txtC.getText()), Integer.parseInt(txtM.getText()));
			for(int i = 0;i < 20; i++){
				datosTabla.addRow(new Integer[]{i+1,genMixto.generar()});
			}
		}else{
			datosTabla.setRowCount(0);
			txtSiguiente.setText("");
			cmdSortearClick(e);
		}
	}
}